// var MongoClient = require('mongodb').MongoClient;
// var assert = require('assert');
// var url = 'mongodb://localhost:27017/vglass';

// function update(db,cb)
// {
//   db.collection("player").updateOne(
//             {id: 1}, 
//             {$set: {banTime:2}}, 
//             function(err,r){
//                 cb(err,r)
//             });  

//     // db.collection("player").find({})

// }

// var insertDocuments = function(db, callback) {
//   // Get the documents collection
//   var collection = db.collection('player');
//   // Insert some documents
//   // collection.insert([
//   //   {a : 1}, {a : 2}, {a : 3}
//   // ], function(err, result) {
//   //   assert.equal(err, null);
//   //   assert.equal(3, result.result.n);
//   //   assert.equal(3, result.ops.length);
//   //   console.log("Inserted 3 documents into the document collection");
//   //   callback(result);
//   // });

//   collection.insertOne({id:1,endTime:new Date()},function (error, result) {
//       // db.collection("player").updateOne(
//       //       {id: 1}, 
//       //       {$set: {banTime:2}}, 
//       //       function(err,r){
//       //           cb(err,r)
//       //       });  

//       var updateStr = {$set: { endTime : null }};
//       collection.updateOne({id:1}, updateStr, function (error, result) {
//           callback(error, result)
//       })

//         // callback(error, result)
//   });
// }

// // MongoClient.connect(url, )

// MongoClient.connect(url, function(err, db) {
//   insertDocuments(db, function (err, r) {
//       assert.equal(null, err);
//       console.log("Connected correctly to server.", err);
//       db.close();
//   })
// });



// var MongoClient = require('mongodb').MongoClient;
// var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1';    

// var updateData = function(db, callback) {  
//     //连接到表  
//     var collection = db.collection('tb2');
//     //更新数据
//     var whereStr = {"name":'wilson001'};
//     var updateStr = {$set: { "age" : 100 }};
//     collection.update(whereStr,updateStr, function(err, result) {
//         if(err)
//         {
//             console.log('Error:'+ err);
//             return;
//         }     
//         callback(result);
//     });
// }

// MongoClient.connect(DB_CONN_STR, function(err, db) {
//     console.log("连接成功！");
//     updateData(db, function(result) {
//         console.log(result);
//         db.close();
//     });
// });


// A simple query using findOne

var MongoClient = require('mongodb').MongoClient,
    ObjectID = require('mongodb').ObjectID,
    assert = require('assert'),
    async = require("async");

// function insert_then_find(err, db)
// {
//   // Create a collection we want to drop later
//   var collection = db.collection('simple_limit_skip_find_one_query');
  
//   // Insert a bunch of documents for the testing 
//   // Insert every element of array to collection  
//   collection.insertMany([{a:1, b:1}, {a:2, b:2}, {a:3, b:3}], {w:1}, 
//       function(err, result) {
//         test.equal(null, err);

//         // Perform a simple find and return all the documents
//         // {fields:{b:1}} means only include b
//         // {fields:{b:othernumber}} means exculde field b
//         // http://stackoverflow.com/questions/15961456/meteor-collection-find-always-returns-all-fields
//         collection.findOne({a:3}, {fields:{b:1}}, function(err, doc) {
//         // collection.findOne({a:3},  function(err, doc) {  
//           console.log(doc.b);
//           // test.equal(null, err);
//           // test.equal(null, doc.a);
//           // test.equal(3, doc.b);
//           db.close();
//         });
//     });
// }


function insert_then_find_byObjectId(err, db)
{
  // Create a collection we want to drop later
  var collection = db.collection('simple_limit_skip_find_one_query');
  
  data = {_id:new ObjectID(1), a:1}
  collection.insertOne(data, function(err, result) {
        assert.equal(null, err);
        // console.log(" insertOne ", result);

        collection.findOne({_id:new ObjectID(1)},  function(err, result) {

          assert.equal(null, err);
          console.log(" findOne ", result);
          
          db.close();

        });
    });
}

function insert_test_data(err, db)
{
    var col = db.collection('simple_limit_skip_find_one_query');
    // var array = []
    // for (var index = 0; index < 3; index++) {
    //   array.push({a:index,b:index+1});
    // }
    var array = [{a:7,b:1}, {a:8,b:1}, {a:9,b:1}];
    col.insertMany(array, function(err, r) {
      // test.equal(null, err);
      // test.equal(2, r.insertedCount);

      console.log(r)
      id = r.insertedIds;
      console.log(typeof id[0]); 
      col.findOne({_id:id[0]}, function(err,r){
        console.log(r);
        // Finish up test
        db.close();
      });
      
    });
}


function insert_then_find_byObjectId(err, db)
{
  // Create a collection we want to drop later
  var collection = db.collection('simple_limit_skip_find_one_query');
  
  data = {_id:new ObjectID(1), a:1}
  collection.insertOne(data, function(err, result) {
        assert.equal(null, err);
        // console.log(" insertOne ", result);

        collection.findOne({_id:new ObjectID(1)},  function(err, result) {

          assert.equal(null, err);
          console.log(" findOne ", result);
          
          db.close();

        });
    });
}


function fillFreindInfo(db, idArray, cb) {

    var fillInfo = function (n, cb1) {

      var friendId = idArray[n];
      console.log("friendId", friendId)
      var friendInfo = {};
      //if curFrined Online

      var query = { id:friendId };
      // var query = {};
      // var options = {fields:{name:1, level:1, imToken:1}};
      db.collection("player").findOne(query,  function (error, result) {
          
          if(error) {
              return cb1(error, null);
          }

          console.log("findOne", result);
          // db.close();

          ///consider some player is not created
          // if(result.created) {
              friendInfo = {}
              // friendInfo.playId = friendId;
              // friendInfo.name = friendId+"";
              // result.name;
              friendInfo.level = result.level;
              friendInfo.status = 1;
              friendInfo.token = result.imToken;
              cb1(null, friendInfo);
          // }
          // else{
          //     cb1(null, null);
          // }

          
      });
        
    }

    async.timesSeries(idArray.length, fillInfo, function (err, result) {
        if(err) {
            return cb(err);
        }

        var realResult = [];
        for (var index = 0; index < result.length; index++) {
            var element = result[index];
            if(element) realResult.push(element);
        }

        cb(null, realResult);
    });
}


function test(err, db)
{
    var idArray = [2];
    fillFreindInfo(db, idArray, function(err, result){
      console.log("fillFreindInfo", result);
      db.close();
    });
    // var col = db.collection('simple_limit_skip_find_one_query');
    // // var array = []
    // // for (var index = 0; index < 3; index++) {
    // //   array.push({a:index,b:index+1});
    // // }
    // var array = [{a:7,b:1}, {a:8,b:1}, {a:9,b:1}];
    // col.insertMany(array, function(err, r) {
    //   // test.equal(null, err);
    //   // test.equal(2, r.insertedCount);

    //   console.log(r)
    //   id = r.insertedIds;
    //   console.log(typeof id[0]); 
    //   col.findOne({_id:id[0]}, function(err,r){
    //     console.log(r);
    //     // Finish up test
    //     db.close();
    //   });
      
    // });
}



// function quary(err,db)
// {
//   var col = db.collection('simple_limit_skip_find_one_query');
//   col.find({b:1}).toArray(function(err, docs) {
//       // test.equal(null, err);
//       // test.equal(3, docs.length);
//       console.log(docs);
//       db.close();
//     });
// }





MongoClient.connect('mongodb://localhost:27017/vglass', test);





// var MongoClient = require('mongodb').MongoClient,
//   test = require('assert');
// MongoClient.connect('mongodb://localhost:27017/test', function(err, db) {

//     db.dropCollection("simple_limit_skip_find_one_query");
//     db.close();
  // Create a collection we want to drop later
//   var collection = db.collection('createIndexExample1');
//   collection.drop
//   // Insert a bunch of documents for the index
//   collection.insertMany([{a:1, b:1}, {a:2, b:2}, {a:3, b:3}, {a:4, b:4}], {w:1}, function(err, result) {
    
//     test.equal(null, err);

//     // Create an index on the a field
//     collection.createIndex({a:1, b:1}
//       , {unique:true, background:true, w:1}, function(err, indexName) {

//       // Show that duplicate records got dropped
//       collection.find({}).toArray(function(err, items) {
//         test.equal(null, err);
//         test.equal(4, items.length);

//         // Perform a query, with explain to show we hit the query
//         collection.find({a:2}).explain(function(err, explanation) {
//           test.equal(null, err);
//           test.ok(explanation != null);

//           db.close();
//         });
//       })
//     });
//   });
// });


// var ObjectID = require('mongodb').ObjectID,
//   test = require('assert');

// // Create a new ObjectID
// var objectId = new ObjectID();
// console.log(objectId.toHexString());

// var tmpObjectId = new ObjectID(1);
// console.log(tmpObjectId.toHexString());


// #What is Index
// https://docs.mongodb.com/getting-started/shell/indexes/

